home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2006 February / Gamestar_81_2006-02_dvd.iso / Red Shark / Missions / Mission_9 / Mission.script < prev    next >
Text File  |  2001-12-19  |  14KB  |  486 lines

  1. //-------------------------------------------------------------------
  2. //
  3. //  This code is copyright 2001 by G5 Software.
  4. //  Any unauthorized usage, either in part or in whole of this code
  5. //  is strictly prohibited. Violators WILL be prosecuted to the
  6. //  maximum extent allowed by law.
  7. //
  8. //-------------------------------------------------------------------
  9.  
  10. class CTankBattleMission extends
  11.   CBaseMission, CTankBattleMissionObjectList, CTankBattleMission_Strings, CNavPointUser
  12. {
  13.   int m_NaziForces_A_Num = 0;
  14.   int m_NaziReinforcment_B_Num = 0;
  15.   int m_NaziReinforcment_C_Num = 0;
  16.   int m_NaziReinforcment_D_Num = 0;
  17.   int m_NaziReinforcment_E_Num = 0;
  18.   int m_NaziReinforcment_F_Num = 0;
  19.   int m_NaziReinforcment_G_Num = 0;
  20.  
  21.   int m_SovietForces_A_Num = 0;
  22.   int m_SovietReinforcment_B_Num = 0;
  23.   int m_SovietReinforcment_C_Num = 0;
  24.   int m_SovietReinforcment_D_Num = 0;
  25.   int m_SovietReinforcment_E_Num = 0;
  26.   int m_SovietReinforcment_F_Num = 0;
  27.   int m_SovietReinforcment_G_Num = 0;
  28.  
  29.   int GetAutoGeneratedUnitsQty()
  30.   {
  31.     return
  32.       24
  33.     + 8 * 2
  34.     + 19
  35.     + 27
  36.     + 27
  37.     + 2 * 4
  38.     + 4 * 2
  39.     + 16
  40.     + 4 * 6
  41.     + 5
  42.     + 7
  43.     + 3
  44.     + 6
  45.     + 10
  46.     + 4
  47.     + 1
  48.     + 6; // system
  49.   }
  50.  
  51.   void CTankBattleMission()
  52.   {
  53.     BaseMission_InitMission();
  54.  
  55.     BaseMission_UpdateLoadProgress();
  56.     CreateComponent("DebugCamera", "GameObject", "CDebugCamera");
  57.     SetComponentPosition("DebugCamera",
  58.       matrix(
  59.         1.0, 0.0, 0.0, 8000.0,
  60.         0.0, 1.0, 0.0, 8000.0,
  61.         0.0, 0.0, 1.0,  600.0,
  62.         0.0, 0.0, 0.0,    1.0
  63.       ));
  64.  
  65.     // CreateComponent(IDToRegister, ComponentID, ScriptName | FileName | "")
  66.     BaseMission_UpdateLoadProgress();
  67.     CreateComponent("Atmosphere", "Atmosphere", "CTankBattleMission_Atmosphere");
  68.  
  69.     BaseMission_UpdateLoadProgress();
  70.     CreateComponent("Sky", "SkyObject", "CTankBattleMission_Sky");
  71.  
  72.     BaseMission_UpdateLoadProgress();
  73.     CreateComponent("Terrain", "ProgressiveTerrainObject", "CTankBattleMission_Terrain");
  74.  
  75.     BaseMission_UpdateLoadProgress();
  76.     CreateComponent("Forest", "Forest", "CTankBattleMission_Forest");
  77.  
  78.     BaseMission_UpdateLoadProgress();
  79.     CreateComponent("AIController", "AIController", "CM9_AIController");
  80.  
  81.     BaseMission_CreateObjects();
  82.  
  83.  
  84.     // *** create armies:
  85.  
  86.  
  87.     // --- A ---
  88.  
  89. /*
  90.     CreateM9VillageArmy( "A", array(4, 6), array(10, 10));
  91.     m_SovietForces_A_Num = m_SovietForces_A_Num + 10;
  92.     m_NaziForces_A_Num = m_NaziForces_A_Num + 20;
  93. */
  94.     CreateM9VillageArmy( "A", array(3, 5), array(8, 8));
  95.     m_SovietForces_A_Num = m_SovietForces_A_Num + 8;
  96.     m_NaziForces_A_Num = m_NaziForces_A_Num + 16;
  97.  
  98.     for ( int a = 1; a <= 8; a = a + 1)
  99.     {
  100.       CreateUnitField(
  101.         "NaziAntiAir_A_" + a,
  102.         "CMountedGermanFaustAntiairSandBags",//"CMountedGermanFlak",
  103.         "",
  104.         2,//3
  105.         GetNavPoint( "NavPoint_A_Nazi_AntiAir_" + a),
  106.         GetNavPointRadius( "NavPoint_A_Nazi_AntiAir_" + a));
  107.     }
  108.  
  109.  
  110.     // --- B ---
  111.  
  112. /*
  113.     CreateM9VillageArmy( "B", array(10), array(10, 10));
  114.     m_SovietReinforcment_B_Num = m_SovietReinforcment_B_Num + 10;
  115.     m_NaziReinforcment_B_Num = m_NaziReinforcment_B_Num + 20;
  116. */
  117.     CreateM9VillageArmy( "B", array(7), array(6, 6));
  118.     m_SovietReinforcment_B_Num = m_SovietReinforcment_B_Num + 7;
  119.     m_NaziReinforcment_B_Num = m_NaziReinforcment_B_Num + 12;
  120.  
  121.     // --- C ---
  122.  
  123. /*
  124.     CreateM9VillageArmy( "C", array(10, 10), array(10, 10, 10));
  125.     m_SovietReinforcment_C_Num = m_SovietReinforcment_C_Num + 20;
  126.     m_NaziReinforcment_C_Num = m_NaziReinforcment_C_Num + 30;
  127. */
  128.     CreateM9VillageArmy( "C", array(6, 6), array(5, 5, 5));
  129.     m_SovietReinforcment_C_Num = m_SovietReinforcment_C_Num + 12;
  130.     m_NaziReinforcment_C_Num = m_NaziReinforcment_C_Num + 15;
  131.  
  132.     // --- D ---
  133.  
  134. /*
  135.     CreateM9VillageArmy( "D", array(6, 7), array(10, 10));
  136.     m_SovietReinforcment_D_Num = m_SovietReinforcment_D_Num + 13;
  137.     m_NaziReinforcment_D_Num = m_NaziReinforcment_D_Num + 20;
  138. */
  139.  
  140.     CreateM9VillageArmy( "D", array(5, 6), array(8, 8));
  141.     m_SovietReinforcment_D_Num = m_SovietReinforcment_D_Num + 11;
  142.     m_NaziReinforcment_D_Num = m_NaziReinforcment_D_Num + 16;
  143.  
  144.     for ( int d = 1; d <= 4; d = d + 1)
  145.     {
  146.       CreateUnitField(
  147.         "NaziAntiAir_D_" + d,
  148.         "CGermanAntiair",
  149.         "",
  150.         2,//3,
  151.         GetNavPoint( "NavPoint_D_Nazi_AntiAir_" + d),
  152.         GetNavPointRadius( "NavPoint_D_Nazi_AntiAir_" + d));
  153.     }
  154.  
  155.     for ( int d = 1; d <= 2; d = d + 1)
  156.     {
  157.       CreateUnitField(
  158.         "Nazi_Tank_D_Ambush" + d,
  159.         "CGermanTank",
  160.         "",
  161.         2,//3,
  162.         GetNavPoint( "NavPoint_D_Ambush_" + d),
  163.         GetNavPointRadius( "NavPoint_D_Ambush_" + d));
  164.  
  165.       CreateUnitField(
  166.         "Nazi_AntiAir_D_Ambush" + d,
  167.         "CGermanAntiair",
  168.         "",
  169.         2,//3,
  170.         GetNavPoint( "NavPoint_D_Ambush_" + d),
  171.         GetNavPointRadius( "NavPoint_D_Ambush_" + d));
  172.     }
  173.  
  174.  
  175.     // --- E ---
  176.  
  177. /*
  178.     CreateM9VillageArmy( "E", array(10), array(10));
  179.     m_SovietReinforcment_E_Num = m_SovietReinforcment_E_Num + 10;
  180.     m_NaziReinforcment_E_Num = m_NaziReinforcment_E_Num + 10;
  181. */
  182.  
  183.     CreateM9VillageArmy( "E", array(7), array(9));
  184.     m_SovietReinforcment_E_Num = m_SovietReinforcment_E_Num + 7;
  185.     m_NaziReinforcment_E_Num = m_NaziReinforcment_E_Num + 9;
  186.  
  187.     for ( int e = 1; e <= 6; e = e + 1)
  188.     {
  189.       CreateUnitField(
  190.         "Nazi_Tank_E_Ambush" + e,
  191.         "CGermanTank",
  192.         "",
  193.         2,//3,
  194.         GetNavPoint( "NavPoint_E_Ambush_" + e),
  195.         GetNavPointRadius( "NavPoint_E_Ambush_" + e));
  196.  
  197.       CreateUnitField(
  198.         "Nazi_AntiAir_E_Ambush" + e,
  199.         "CGermanAntiair",
  200.         "",
  201.         2,//3,
  202.         GetNavPoint( "NavPoint_E_Ambush_" + e),
  203.         GetNavPointRadius( "NavPoint_E_Ambush_" + e));
  204.     }
  205.  
  206.  
  207.     // --- F ---
  208.  
  209.     CreateUnitField(
  210.       "SovietTank_F_",
  211.       "CSovietTank",
  212.       "CM9_Soviet_F",
  213.       5,//6,
  214.       GetNavPoint( "NavPoint_F_Soviet"),
  215.       GetNavPointRadius( "NavPoint_F_Soviet"));
  216.  
  217.     CreateUnitField(
  218.       "NaziTank_F_",
  219.       "CGermanTank",
  220.       "CM9_Nazi_F",
  221.       7,//10,
  222.       GetNavPoint( "NavPoint_F_Nazi"),
  223.       GetNavPointRadius( "NavPoint_F_Nazi"));
  224.  
  225.     CreateUnitField(
  226.       "NaziAntiAir_F_",
  227.       "CGermanAntiair",
  228.       "CM9_Nazi_F",
  229.       3,
  230.       GetNavPoint( "NavPoint_F_Nazi"),
  231.       GetNavPointRadius( "NavPoint_F_Nazi"));
  232.  
  233.     m_SovietReinforcment_F_Num = m_SovietReinforcment_F_Num + 5;//6;
  234.     m_NaziReinforcment_F_Num = m_NaziReinforcment_F_Num + 10;//13;
  235.  
  236.  
  237.     // --- G ---
  238.  
  239.     CreateUnitField(
  240.       "SovietTank_G_",
  241.       "CSovietTank",
  242.       "CM9_Soviet_G",
  243.       6,
  244.       GetNavPoint( "NavPoint_G_Soviet"),
  245.       GetNavPointRadius( "NavPoint_G_Soviet"));
  246.  
  247.     CreateUnitField(
  248.       "NaziTank_G_",
  249.       "CGermanTank",
  250.       "CM9_Nazi_G",
  251.       10,
  252.       GetNavPoint( "NavPoint_G_Nazi"),
  253.       GetNavPointRadius( "NavPoint_G_Nazi"));
  254.  
  255.     CreateUnitField(
  256.       "NaziAntiAir_G_",
  257.       "CGermanAntiair",
  258.       "CM9_Nazi_G",
  259.       4,
  260.       GetNavPoint( "NavPoint_G_Nazi"),
  261.       GetNavPointRadius( "NavPoint_G_Nazi"));
  262.  
  263.     m_SovietReinforcment_G_Num = m_SovietReinforcment_G_Num + 6;
  264.     m_NaziReinforcment_G_Num = m_NaziReinforcment_G_Num + 14;
  265.  
  266.     for ( int g = 1; g <= 1; g = g + 1)
  267.     {
  268.       CreateUnitField(
  269.         "NaziAntiAir_G_" + g,
  270.         "CGermanAntiair",
  271.         "",
  272.         2,//3,
  273.         GetNavPoint( "NavPoint_G_Nazi_AntiAir_" + g),
  274.         GetNavPointRadius( "NavPoint_G_Nazi_AntiAir_" + g));
  275.     }
  276.   }
  277.  
  278.   // *** routines ***
  279.  
  280.   void CreateM9VillageArmy( string _VillageName, array _SovietNum, array _NaziNum)
  281.   {
  282.     // soviet
  283.     for ( int s = 1; s <= _SovietNum.size(); s = s + 1)
  284.     {
  285.       CreateUnitLine(
  286.         "SovietTank_" + _VillageName + "_" + s,
  287.         "CSovietTank",
  288.         "CM9_Soviet_" + _VillageName,
  289.         _SovietNum[s-1],
  290.         GetNavPoint( "NavPoint_" + _VillageName + "_Soviet_" + s + "_start"),
  291.         GetNavPoint( "NavPoint_" + _VillageName + "_Soviet_" + s + "_end"));
  292.     };
  293.  
  294.     // nazi
  295.     for ( int n = 1; n <= _NaziNum.size(); n = n + 1)
  296.     {
  297.       CreateUnitLine(
  298.         "NaziTank_" + _VillageName + "_" + n,
  299.         "CGermanTank",
  300.         "CM9_Nazi_" + _VillageName,
  301.         _NaziNum[n-1],
  302.         GetNavPoint( "NavPoint_" + _VillageName + "_Nazi_" + n + "_start"),
  303.         GetNavPoint( "NavPoint_" + _VillageName + "_Nazi_" + n + "_end"));
  304.     };
  305.   }
  306.  
  307.   array m_MissionObjectivesStatuses =
  308.           array(
  309.             str_ObjectiveInProgress
  310.           );
  311.  
  312.   array m_BonusMissionObjectivesStatuses =
  313.           array(
  314.             str_ObjectiveInProgress,
  315.             str_ObjectiveInProgress,
  316.             str_ObjectiveInProgress,
  317.             str_ObjectiveInProgress
  318.                       );
  319.  
  320.   //
  321.   //  'virtual' methods
  322.   //
  323.  
  324.   //
  325.   //  Mission statistics
  326.  
  327.   string GetMissionStatistics()
  328.   {
  329.     return str_StatisticsTitle;
  330.   }
  331.  
  332.   //
  333.   //  Mission navpoints
  334.  
  335.   array GetNavPoints()
  336.   {
  337.     array navpoints =
  338.       array(
  339.         GetNavPoint("NavPoint_Village_A"),
  340.         GetNavPoint("NavPoint_Village_E"),
  341.         GetNavPoint("NavPoint_Village_D"),
  342.         GetNavPoint("NavPoint_Village_C"),
  343.         GetNavPoint("NavPoint_Village_B")
  344.       );
  345.     return navpoints;
  346.   }
  347.  
  348.   // the 1st navpoint in the array is a default one
  349.   array GetNavPointsDescriptions()
  350.   {
  351.     return m_NavigationPoints;
  352.   }
  353.  
  354.   //
  355.   //  Mission map skin file
  356.  
  357.   string GetMapSkinFileName()
  358.   {
  359.     return "Missions/Mission_9/Map.skin";
  360.   }
  361.  
  362.  
  363.  
  364.   void OnGameObjectDestroyed(string _id)
  365.   {
  366.     BaseMission_OnGameObjectDestroyed(_id);
  367.  
  368.     if ( Core_IsStringStartsWith(_id, "SovietTank_A"))
  369.       m_SovietForces_A_Num = m_SovietForces_A_Num - 1;
  370.     if ( Core_IsStringStartsWith(_id, "NaziTank_A"))
  371.       m_NaziForces_A_Num = m_NaziForces_A_Num - 1;
  372.  
  373.     if ( Core_IsStringStartsWith(_id, "SovietTank_B"))
  374.       m_SovietReinforcment_B_Num = m_SovietReinforcment_B_Num - 1;
  375.     if ( Core_IsStringStartsWith(_id, "NaziTank_B"))
  376.     {
  377.       m_NaziReinforcment_B_Num = m_NaziReinforcment_B_Num - 1;
  378.       if ( m_NaziReinforcment_B_Num == 0)
  379.         BaseMission_CompleteBonusObjective(3);
  380.     }
  381.  
  382.     if ( Core_IsStringStartsWith(_id, "SovietTank_C"))
  383.       m_SovietReinforcment_C_Num = m_SovietReinforcment_C_Num - 1;
  384.     if ( Core_IsStringStartsWith(_id, "NaziTank_C"))
  385.     {
  386.       m_NaziReinforcment_C_Num = m_NaziReinforcment_C_Num - 1;
  387.       if ( m_NaziReinforcment_C_Num == 0)
  388.         BaseMission_CompleteBonusObjective(2);
  389.     }
  390.  
  391.     if ( Core_IsStringStartsWith(_id, "SovietTank_D"))
  392.       m_SovietReinforcment_D_Num = m_SovietReinforcment_D_Num - 1;
  393.     if ( Core_IsStringStartsWith(_id, "NaziTank_D"))
  394.     {
  395.       m_NaziReinforcment_D_Num = m_NaziReinforcment_D_Num - 1;
  396.       if ( m_NaziReinforcment_D_Num == 0)
  397.         BaseMission_CompleteBonusObjective(1);
  398.     }
  399.  
  400.     if ( Core_IsStringStartsWith(_id, "SovietTank_E"))
  401.       m_SovietReinforcment_E_Num = m_SovietReinforcment_E_Num - 1;
  402.     if ( Core_IsStringStartsWith(_id, "NaziTank_E"))
  403.     {
  404.       m_NaziReinforcment_E_Num = m_NaziReinforcment_E_Num - 1;
  405.       if ( m_NaziReinforcment_E_Num == 0)
  406.         BaseMission_CompleteBonusObjective(0);
  407.     }
  408.  
  409.     if ( Core_IsStringStartsWith(_id, "SovietTank_F"))
  410.       m_SovietReinforcment_F_Num = m_SovietReinforcment_F_Num - 1;
  411.     if ( Core_IsStringStartsWith(_id, "NaziTank_F") || Core_IsStringStartsWith(_id, "NaziAntiAir_F_"))
  412.       m_NaziReinforcment_F_Num = m_NaziReinforcment_F_Num - 1;
  413.  
  414.     if ( Core_IsStringStartsWith(_id, "SovietTank_G"))
  415.       m_SovietReinforcment_G_Num = m_SovietReinforcment_G_Num - 1;
  416.     if ( Core_IsStringStartsWith(_id, "NaziTank_G") || Core_IsStringStartsWith(_id, "NaziAntiAir_G_"))
  417.       m_NaziReinforcment_G_Num = m_NaziReinforcment_G_Num - 1;
  418.  
  419.  
  420.     //#TMP:
  421.     /*
  422.     string dbg_msg = "S: A=" + m_SovietForces_A_Num
  423.       + ",B=" + m_SovietReinforcment_B_Num
  424.       + ",C=" + m_SovietReinforcment_C_Num
  425.       + ",D=" + m_SovietReinforcment_D_Num
  426.       + ",E=" + m_SovietReinforcment_E_Num
  427.       + ",F=" + m_SovietReinforcment_F_Num
  428.       + ",G=" + m_SovietReinforcment_G_Num
  429.       + "| N: A=" + m_NaziForces_A_Num
  430.       + ",B=" + m_NaziReinforcment_B_Num
  431.       + ",C=" + m_NaziReinforcment_C_Num
  432.       + ",D=" + m_NaziReinforcment_D_Num
  433.       + ",E=" + m_NaziReinforcment_E_Num
  434.       + ",F=" + m_NaziReinforcment_F_Num
  435.       + ",G=" + m_NaziReinforcment_G_Num;
  436.  
  437.     Core_BroadcastEvent(
  438.       "OnDisplayMessage",
  439.       dbg_msg,
  440.       color(0.0, 1.0, 1.0));
  441.  
  442.     Core_LogMessage( dbg_msg);
  443.     */
  444.  
  445.     // check primary objective completion
  446.  
  447.     int NaziNum
  448.       = m_NaziForces_A_Num
  449.       + m_NaziReinforcment_B_Num
  450.       + m_NaziReinforcment_C_Num
  451.       + m_NaziReinforcment_D_Num
  452.       + m_NaziReinforcment_E_Num
  453.       + m_NaziReinforcment_F_Num
  454.       + m_NaziReinforcment_G_Num;
  455.  
  456.     if ( NaziNum == 0)
  457.     {
  458.       BaseMission_CompleteObjective(0);
  459.     };
  460.  
  461.     // check primary objective failure
  462.  
  463.     int SovietNum
  464.       = m_SovietForces_A_Num
  465.       + m_SovietReinforcment_B_Num
  466.       + m_SovietReinforcment_C_Num
  467.       + m_SovietReinforcment_D_Num
  468.       + m_SovietReinforcment_E_Num
  469.       + m_SovietReinforcment_F_Num
  470.       + m_SovietReinforcment_G_Num;
  471.  
  472.     if ( SovietNum == 0)
  473.     {
  474.       BaseMission_DelayedQuit();
  475.     };
  476.   }
  477.  
  478.   void OnMissionLoaded()
  479.   {
  480.     Core_SendEventTo("Helicopter", "OnInitiallyEnableTargetScreen", false);
  481.  
  482.     // Start mission music playing
  483.     Core_SendEventTo(SOID_MusicController, "PlayMissionMusic", 9);
  484.   }
  485. }
  486.